אלגוריתמים חמדניים אלגוריתם חמדן, הוא כזה שבכל צעד עושה את הבחירה הטובה ביותר האפשרית, ולא מתחרט בהמשך גישה זו נראית פשטנית מדי, וכמובן שלא תמיד היא נכונה, אך במקרים רבים היא מוצאת פתרון אופטימאלי בתרגול זה נעסוק בפתרון בעיית בחירת הפעילויות ע"י גישה חמדנית בעיית הפעילויות:, ונתונים זמני ההתחלה והסיום שלהן, כאשר נתונה קבוצה של פעילויות : מציינים, בהתאמה, את זמן ההתחלה והסיום של הפעילות ה- -ית ו- הגדרה: שתי פעילויות אינן מתנגשות אם או אינטואיטיבית, הכוונה שזמני הפעילויות אינם חופפים למעט, אולי, רגע בודד שבו מסתיימת פעילות אחת -ומתחילה פעילות שנייה הגדרה: קבוצת פעילויות חוקית היא קבוצה בה כל שתי פעילויות אינן מתנגשות צריך למצוא: תת -קבוצה חוקית של פעילויות מתוך מקסימאלי של פעילויות( מקסימאלית בגודלה )תת -קבוצה בעלת מספר אבחנה: ייתכן כי יש יותר מקבוצה אחת כזאת נרצה להציג אלגוריתם חמדני שמוצא קבוצה חוקית מגודל מקסימאלי הבחירה החמדנית תבחר בכל שלב פעילות שאחרי בחירתה, משך הזמן שנשאר בכדי להמשיך ולשבץ בו פעילויות נוספות, הוא הארוך ביותר זוהי פעילות עם זמן סיום מוקדם ביותר נתחיל בהצגת פתרון איטראטיבי, ובהמשך נראה גם פתרון חמדני רקורסיבי אלגוריתם איטראטיבי האלגוריתם בונה קבוצת פעילויות, שהיא קבוצת הפעילויות הנבחרות בכל שלב נבחרת באופן חמדני פעילות אחת מתוך, שהיא קבוצת הפעילויות שמהן ניתן לבחור בתחילה ריקה ו- מכילה את כל הפעילויות עם כל בחירה, הפעילות שנבחרה נוספת ל - G ומ- S נמחקות כל הפעילויות שמתנגשות עם הפעילות שבחרנו, כך שלא תיבחר אחת מהן בהמשך While do: Return סכמה כללית מומלצת להוכחת נכונות )עבור אלגוריתמים חמדנים( בד"כ אלגוריתם חמדני בונה את הפתרון בשלבים כאשר בכל שלב הפתרון שהאלגוריתם בנה עד כה מוכל בפתרון אופטימאלי כלשהו בסוף ריצת האלגוריתם ערכו של הפתרון שהתקבל זהה לגודל הפתרון האופטימאלי ולכן הם שווים 1
הוכחת נכונות 1: )הועברה בהרצאה( אינטואיציה: נוכיח שבכל שלב של ריצת האלגוריתם מתקיים: קיים פתרון אופטימאלי המכיל את הקבוצה ( ) שהאלגוריתם בחר עד לאותה נקודה וכל שאר הפעילויות בו לקוחות מתוך קבוצת הפעילויות שנותרו לבחירה, ( S ) בהתחלה ריקה ומוכלת בכל פתרון בכל פעם שנוסיף ל- פעילות, יש להראות שעדיין קיים פתרון אופטימאלי המכיל את כלומר, יש להראות שכשמוסיפים ל - את הפעילות ה- -ית, קיים פתרון אופטימאלי המכיל את כל הפעילויות שנמצאות באותו רגע ב - נסתכל על, הפתרון שהובטח לנו כי הוא מכיל את הפעילויות הראשונות שבחרנו אם הוא מכיל גם את הפעילות ה- שבחרנו, סיימנו אם לא, נטען כי נוכל למצוא פתרון )אולי אחר( זהה בגודלו ל -, אשר מכיל את כל k האיברים הראשונים שבחרנו, וזאת ע"י החלפת איבר מסוים של )שאינו בין האיברים הקודמים( באיבר ה- שנוסף ל- טענה עיקרית: הקבוצה המוחזרת ע"י האלגוריתם היא קבוצת פעילויות חוקית מגודל מקסימאלי טענת עזר: בכל פעם שהאלגוריתם מגיע לבדיקת תנאי הלולאה קיימת קבוצה חוקית מגודל מקסימאלי של פעילויות מ- אשר מכילה את ושאר הפעילויות בה לקוחות מ- בלבד )כלומר: בסוף כל איטרציה מתקיים ) אבחנה: בכל פעם שמתווספת ל - פעילות, זוהי פעילות בעלת זמן סיום מינימאלי מבין כל הפעילויות ב- אשר אינה מתנגשת עם אף אחת מהפעילויות שנבחרו עד כה ב- )הסבר: הבחירה נעשית מתוך, ובכל הוספה קודמת של פעילות, הורדנו מ - את כל הפעילויות שמתנגשות עם אותה פעילות לכן מובטח לנו שכל בחירה תהיה מתוך קבוצת פעילויות שאינן מתנגשות עם אף פעילות שנבחרה בשלב קודם( הוכחת נכונות האלגוריתם: ראשית, נשים לב לכך שהאלגוריתם סופי- בכל איטרציה מוציאים מ- S לפחות פעילות אחת, ולכן בהכרח בשלב כלשהו יתקיים תנאי העצירה ( (, והאלגוריתם יסתיים לפי טענת העזר, קיימת קבוצת פעילויות חוקית מקסימאלית בגודלה המכילה את אשר מוחזרת בסיום האלגוריתם, ובפרט היא קבוצת פעילויות חוקית יתרה מזאת, בסיום הלולאה הקבוצה ריקה ולכן על פי טענת העזר אין ב- פעילויות נוספות 2
הוכחת טענת העזר: באינדוקציה על גודל הקבוצה, וכן מתקיים פעילויות - הקבוצה G המוחזקת ע"י האלגוריתם לאחר בחירת -ית שהאלגוריתם בחר - הפעילות ה- - קב' הפעילויות הנותרות, אחרי הורדת, ונסמנה נוכיח שקיימת קבוצה חוקית מקסימאלית המכילה את קבוצה חוקית מקסימלית המכילה את נסמן, אך יתכן ש- מתקיים נשים לב כי בעוד לכל סימונים: - - - הערה: לא להניח את קיומה של הקבוצה, צריך להוכיח את זה וכל קבוצה חוקית מגודל מקסימאלי מכילה את, עבור, ומתקיים אשר מכילה את נניח כי קיימת קבוצה חוקית מגודל מקסימאלי : וכי אשר מכילה את ונראה כי קיימת קבוצה חוקית מגודל מקסימאלי, ולכן, אזי אם - וגם : נשים לב ש נראה ש- הטענה מתקיימת יצא גם מ, כלומר האיבר היחיד שיצא מהקבוצה i k )אם לא קיימת פעילות המתנגשת עם, ובהכרח קיימת פעילות אחרת, - ( כעת נראה כי הקבוצה הייתה חוקית, בסתירה למקסימאליות של כזו, אזי : היא קבוצת פעילויות חוקית מגודל מקסימאלי אשר מכילה את אינן מתנגשות אחת עם השנייה, ולכן נותר להראות שכל הפעילויות ידוע כי כל הפעילויות ב- : אינן מתנגשות עם ב- לפי האבחנה כמו כן,, היא אינה מתנגשת עם אף פעילות ב- מכיוון ש- ] [ ] [, מתקיים מתנגשת עם וכיוון ש-, לפי ]2[ מתקיים אשר מקיימת לכל פעילות o לא מתנגשת עם ולכן אינן מתנגשות ו- : מכיוון ש- אשר מקיימת לכל פעילות o לפי האבחנה בהכרח מצירוף של ]1[ נובע כי ברור כי לא מתנגשת עם מכאן ש- ולכן בקלות ניתן לראות כי כיוון ש- עדיין מתקיים מאותם השיקולים כמו במקרה הקודם )עבור התנאי ש ) מקסימאלית ולכן כמו כן היא קבוצה חוקית המכילה את הראנו כי 3
הוכחת נכונות 2: סימונים: - הפתרון שהאלגוריתם החמדן החזיר עפ"י סדר הבחירה - פתרון אופטימאלי כלשהו הממוין עפ"י זמן סיום הפעילויות, כלומר אינטואיציה: בכל פעם אנו בוחרים בפעילות עם זמן הסיום המוקדם ביותר וכך מאפשרים ליותר פעילויות להתקיים בהמשך נוכיח כי הפעילות בקבוצת הפעילויות שהאלגוריתם מחזיר, מסתיימת לפני הפעילות בפתרון האופטימאלי טענה עיקרית: הקבוצה המוחזרת ע"י האלגוריתם היא קבוצת פעילויות חוקית מגודל מקסימאלי טענת עזר: לכל l, לא אחרי הפעילות ה- ז"א הפעילות ה- -ית בקבוצת הפעילויות -ית בפתרון האופטימאלי שהאלגוריתם מחזיר, מסתיימת הוכחת הטענה העיקרית: חוקיות: לאחר הוספת פעילות ל- כל הפעילויות המתנגשות עימה מוצאות מקבוצת הפעילויות הנותרות, לכן בכל פעם שמתווספת ל- פעילות מ- היא אינה מתנגשת עם אף אחת מהפעילויות שנבחרו עד כה ב- אופטימאליות: נשים לב כי כיוון ש- הוא פיתרון אופטימאלי, אזי מטענת העזר נובע כי כיוון שהפעילות היא האחרונה שהוסיף האלגוריתם החמדן, אזי אין אף פעילות בקלט שזמן ההתחלה שלה גדול מ- מכאן נובע שאין אף פעילות בקלט שמתחילה אחרי לכן היא הפעילות האחרונה ב- ולכן ולכן הוכחת טענת עזר באינדוקציה על : מסתיימת ראשונה מבין כל הפעילויות, ובפרט הפעילות בסיס: נוכיח כי צעד האינדוקציה: הנחת האינדוקציה היא )]1[ הנחת האינדוקציה ]2[ ] [ ] [ אינן חותכות, אזי היות וכל הפעילויות ב- זרות( נבחרת מכיוון בזמן ש- ולכן עדיין נמצאת ב- מתחילה אחרי סוף פעילות כלומר הפעילות )החמדן בוחר בכל צעד פעילות עם זמן סיום את פעילות שהאלגוריתם החמדן בחר בצעד ה- מינימאלי ב- ) S מתקיים כי הערה: זמן הריצה של האלגוריתם האיטראטיבי במימוש נאיבי הינו מימוש נאיבי של מציאת הינו Ω וישנן לכל היותר כאשר קריאות הינו מספר, שכן זמן 4
אלגוריתם רקורסיבי גם בגרסא הרקורסיבית נשתמש לצורך הבחירה החמדנית באותו קריטריון שבו השתמשנו בגרסא האיטראטיבית, כולל נגדיר כקבוצת הפעילויות ב - אשר מתנגשות עם פעילות עצמה A If o Return else o index of an activity in A with earliest finishing time o Return דוגמא: 2 ו- 5 ראו דוגמאת ריצה באתר בדוגמא זו הפתרון שיתקבל מהפעלת האלגוריתם האיטראטיבי יהיה קבוצה המכילה את פעילויות A הוכחת נכונות: טענה עיקרית: הפונקציה הרקורסיבית מחזירה תת -קבוצה חוקית של מקסימאלית בגודלה טענה 1: )נכונות הבחירה החמדנית( תהי קבוצת פעילויות לא ריקה תהי אזי קיימת קבוצה חוקית מקסימאלית הפעילות עם זמן סיום מוקדם ביותר ב- ביחס ל- ) ) המכילה את טענה 2: )נכונות מבנה הרקורסיה( תהי קבוצת פעילויות לא ריקה תהי, קבוצה חוקית מקסימאלית המכילה את הפעילות, אזי תת הפתרון הוא קבוצה חוקית מקסימאלית עבור בעיית הפעילויות מתוך הקבוצה )כל פעילות מתנגשת עם עצמה( אבחנה: הקבוצה אינה ריקה ולכן 5
הוכחת הטענה הראשית: באינדוקציה שלמה על גודל הקבוצה קטן בלפחות 1 לאחר כל צעד אנו משתמשים באינדוקציה שלמה כיוון שגודל הקבוצה (**), שהיא אכן קבוצה חוקית אז מוחזרת תנאי העצירה מתקיים כאשר -בסיס: צעדים סופית ובכל צעד היא קטנה ממש, לאחר לכל היותר מכיוון ש- מקסימאלית המוכלת ב - יתקיים תנאי זה :, ונוכיח עבור המקרה שבו כך ש- -צעד: נניח את נכונות הטענה עבור כל קלט ) את הפעילות שנבחרה ע"י האלגוריתם בשלב הנוכחי )בו נסמן ב- את הפלט של הקריאה הרקורסיבית עם הקלט נסמן ב- ) )אנו רוצים להוכיח את הטענה עבור תת הקבוצה המוחזרת בשורה האחרונה, קטן ממש בגודלו מ- A לכן לפי הנחת - חוקיות: מהאבחנה נובע כי הקלט כמו כן, מהגדרת היא תת -קבוצה חוקית מקסימאלית בגודלה של האינדוקציה, היא קבוצת, ולכן גם הקבוצה לא מתנגשת עם הפעילות, אף פעילות ב- פעילויות חוקית קיומה מובטח, המכילה את קב' פעילויות חוקית מקסימאלית, - מקסימאליות: נסמן ב- היא קבוצה חוקית מקסימאלית עבור בעיית הפעילויות מתוך עפ"י טענה 1 מטענה 2 נובע כי מגודל מקסימאלי עבור ו- שתי הקבוצות הקבוצה מקס' מטענה 2(, לכן גודלן שווה ולכן מקס' מהנחת האינדוקציה ו - ( לכן, מגודל מקסימאלי היא תת-קבוצה חוקית של נובע כי גם מהמקסימאליות של )סוף צעד האינדוקציה( מכילה את כל היא נכונה גם עבור השלב ההתחלתי, בו - מכיוון שטענת האינדוקציה הוכחה לכל מקסימאלית בגודלה הפעילויות לכן הפונקציה הרקורסיבית מחזירה תת -קבוצה חוקית של הוכחת טענה 1: אינה סיימנו אחרת מכילה את אם תת -קבוצה חוקית מקסימאלית של תהי ** הפעילות בעלת זמן הסיום המינימאלי מבין כל הפעילויות ב- P מכיוון תהי מכילה את בנוסף, לפי אופן מקיימת אינן מתנגשות, אז כל פעילות שהפעילויות ב- אינה, כלומר מתקיים בסה"כ, לכל, מתקיים בחירתה של, נישאר עם קבוצה ונכניס במקומה את, לכן אם נוציא את מתנגשת עם אף פעילות ב- חוקית שגודלה לא השתנה, כנדרש מגודל מקסימאלי, המכילה את היא תת-קבוצה של כלומר, 6
הוכחת טענה 2: קבוצה חוקית מקסימאלית המכילה את הפעילות תהי היא קבוצת פעילויות חוקית, הרי גם הקבוצה מכיוון ש- חוקיות: ואין ב- מכיוון ש- חוקית היא תת קבוצה חוקית של )פרט ל- x עצמה( לכן אינה מגודל מקסימאלי עבור מקסימאליות: נניח בשלילה כי כך ש- Q, תת-קבוצה חוקית של היא תת -קבוצה חוקית של B כמו כן,, ולכן אינה מתנגשת עם, בסתירה למקסימאליות של היא קבוצת פעילויות פעילויות שמתנגשות עם x, כלומר קיימת אף פעילות ב- הערה: האלגו' החמדן פועל בצורה דומה לאלגו' האיטראטיבי הראשון שראינו לכן זמן הריצה של האלגוריתם הרקורסיבי גם הוא כאשר הינו מספר הפעילויות הערה: שימו לב לתכונה הקיימת באלגוריתם החמדן: לאחר כל שלב באלגוריתם, קבוצת הפעילויות הנותרות קטנה ממש אנו נשארים עם בעיה קטנה יותר, הדומה לבעיה המקורית בשני האלגוריתמים שהוצגו עד כה תכונה זו נראית באופן ברור באלגוריתם הבא תכונה זו קיימת באופן חבוי נציין כי באופן כללי, באלגוריתמים חמדניים, תכונה זו תמיד קיימת מציאת לא חייבת להיעשות באופן מפורש ניתן לשפר את האלגוריתם באופן כזה שזמן הריצה יהיה קצר יותר, כפי שנראה מיד הגרסא הבאה של אלגוריתם Activity_Iter שקולה לגמרי לזו שראינו בגרסא זו אין מחשבים את באופן מפורש, אלא i חישוב() Collide נעשה למעשה ע"י כך שמכניסים פעילות ל - G רק אם היא אינה מתנגשת עם פעילות קודמת, כלומר אינה ב- Collide() i G עבור האינדקס i האחרון שנוסף ל- While do: o o o if then: Return : ניתוח זמן ריצה של האלגוריתם כדי לנתח את זמן הריצה של האלגוריתם, יש לענות על השאלה כיצד נאפשר בכל שלב את בחירתה של פעילות בעלת זמן סיום מינימאלי מבין כל אלו שעדיין לא נבדקו, באופן יעיל? פתרון אחד הוא לבצע מיון מקדים של כל הפעילויות ב- בסדר עולה של זמני סיום זה יוסיף לזמן הריצה מחובר של 7
פתרון שני, להשתמש בערימת -מינימום שבה המפתחות הם זמני הסיום של הקטעים בניית הערימה נעשית ב- פעולות, וכל שליפה דורשת פעולות, ובסה"כ עבור שליפות נזדקק ל- (n )O nlog פעולות בסה"כ גם שימוש בערימה יוסיף לזמן הריצה מחובר של פעמים, כאשר בכל פעם מתבצע מספר קבוע של פעולות, לכן זמן הרצת ( ) לכן מתקבל כי: מיון מקדים כנ"ל: תנאי הלולאה מתקיים בדיוק הלולאה: בסה"כ נקבל ההוכחה דומה מאוד להוכחות הקודמות הרעיון הוא שבהינתן פתרון אופטימלי נקח את הפעילות הראשונה ששונה מזאת ב- המוחזר ע"י האלגוריתם ומראים שניתן להחליף את הפעילויות ולהישאר עם פתרון חוקי האופטימליות נובעת מכך שגודל לא השתנה 8